diff --git a/sklearn/neighbors/nca.py b/sklearn/neighbors/nca.py
index 1d278b6e1..1737c7723 100644
--- a/sklearn/neighbors/nca.py
+++ b/sklearn/neighbors/nca.py
@@ -8,7 +8,7 @@ Neighborhood Component Analysis
 # License: BSD 3 clause
 
 from __future__ import print_function
-
+import numbers
 from warnings import warn
 import numpy as np
 import sys
@@ -299,7 +299,12 @@ class NeighborhoodComponentsAnalysis(BaseEstimator, TransformerMixin):
 
         # Check the preferred dimensionality of the projected space
         if self.n_components is not None:
-            check_scalar(self.n_components, 'n_components', int, 1)
+            if not isinstance(self.n_components, numbers.Integral):
+                raise TypeError("n_components must be an integer; got (type {})"
+                                .format(type(self.n_components)))
+            if self.n_components <= 0:
+                raise ValueError("n_components must be positive; got (n_components={})"
+                                 .format(self.n_components))
 
             if self.n_components > X.shape[1]:
                 raise ValueError('The preferred dimensionality of the '
@@ -319,7 +324,7 @@ class NeighborhoodComponentsAnalysis(BaseEstimator, TransformerMixin):
                                          self.components_.shape[1]))
 
         check_scalar(self.max_iter, 'max_iter', int, 1)
-        check_scalar(self.tol, 'tol', float, 0.)
+        check_scalar(self.tol, 'tol', numbers.Real, min_val=0)
         check_scalar(self.verbose, 'verbose', int, 0)
 
         if self.callback is not None:
